/**
 * 基础辅助函数模块
 */

// 导入可能需要的其他辅助模块
const dataHelper = require('./data_helper.js');
const timeHelper = require('./time_helper.js');

/**
 * 基础辅助模块，提供通用功能
 */
class BaseHelper {
  /**
   * 判断是否为空
   * @param {*} value 要判断的值
   */
  static isEmpty(value) {
    if (value === null || value === undefined) return true;
    if (typeof value === 'string' && value.trim() === '') return true;
    if (Array.isArray(value) && value.length === 0) return true;
    if (typeof value === 'object' && Object.keys(value).length === 0) return true;
    return false;
  }

  /**
   * 对象深拷贝
   * @param {Object} obj 要拷贝的对象
   */
  static deepClone(obj) {
    if (obj === null || typeof obj !== 'object') return obj;
    
    const result = Array.isArray(obj) ? [] : {};
    
    for (const key in obj) {
      if (Object.prototype.hasOwnProperty.call(obj, key)) {
        result[key] = this.deepClone(obj[key]);
      }
    }
    
    return result;
  }

  /**
   * 合并对象
   * @param {Object} target 目标对象
   * @param {Object} source 源对象
   */
  static merge(target, source) {
    for (const key in source) {
      if (Object.prototype.hasOwnProperty.call(source, key)) {
        if (source[key] instanceof Object && key in target && target[key] instanceof Object) {
          this.merge(target[key], source[key]);
        } else {
          target[key] = source[key];
        }
      }
    }
    return target;
  }

  /**
   * 获取唯一ID
   */
  static getUniqueID() {
    return 'id_' + timeHelper.time() + '_' + Math.random().toString(36).substr(2, 9);
  }

  /**
   * 安全获取嵌套对象属性值
   * @param {Object} obj 对象
   * @param {String} path 路径，如 "a.b.c"
   * @param {*} defaultValue 默认值
   */
  static getValueByPath(obj, path, defaultValue = null) {
    const keys = path.split('.');
    let result = obj;
    
    for (const key of keys) {
      if (result === null || result === undefined || !Object.prototype.hasOwnProperty.call(result, key)) {
        return defaultValue;
      }
      result = result[key];
    }
    
    return result === undefined ? defaultValue : result;
  }

  /**
   * 格式化文件大小
   * @param {Number} size 文件大小（字节）
   */
  static formatFileSize(size) {
    if (size < 1024) return size + 'B';
    if (size < 1024 * 1024) return (size / 1024).toFixed(2) + 'KB';
    if (size < 1024 * 1024 * 1024) return (size / (1024 * 1024)).toFixed(2) + 'MB';
    return (size / (1024 * 1024 * 1024)).toFixed(2) + 'GB';
  }
}

module.exports = BaseHelper; 